package org.inspiration.dudu.content.service;

import org.inspiration.dudu.common.pojo.Result;
import org.inspiration.dudu.content.model.dto.QuestionDTO;
import org.inspiration.dudu.content.model.entity.QuestionEntity;
import org.inspiration.dudu.content.model.vo.QuestionSimpleVO;
import org.inspiration.dudu.content.model.vo.QuestionVO;

import java.util.List;

/**
 * 问题服务接口，提供与问题相关的操作方法。
 */
public interface QuestionService {
    /**
     * 创建一个新的问题。
     * 
     * @param questionEntity 问题实体
     */
    void createQuestion(QuestionEntity questionEntity);

    /**
     * 增加指定内容的点赞数。
     * 
     * @param contentId 内容ID
     */
    void increaseLikeCount(String contentId);

    /**
     * 减少指定内容的点赞数。
     * 
     * @param contentId 内容ID
     */
    void decreaseLikeCount(String contentId);

    /**
     * 根据内容ID获取用户ID。
     * 
     * @param contentId 内容ID
     * @return 用户ID
     */
    Long getUserIdByContentId(String contentId);

    /**
     * 增加指定内容的收藏数。
     * 
     * @param contentId 内容ID
     */
    void increaseFavoriteCount(String contentId);

    /**
     * 减少指定内容的收藏数。
     * 
     * @param contentId 内容ID
     */
    void decreaseFavoriteCount(String contentId);

    /**
     * 将问题DTO转换为问题实体。
     * 
     * @param questionDTO 问题数据传输对象
     * @param contentFilePath 内容文件路径
     * @param uuid 唯一标识符
     * @return 转换后的问题实体
     */
    QuestionEntity transToEntity(QuestionDTO questionDTO, String contentFilePath, String uuid);

    /**
     * 根据问题ID获取问题视图对象。
     * 
     * @param id 问题ID
     * @return 问题视图对象
     */
    QuestionVO getQuestionById(String id);

    /**
     * 将问题实体转换为问题视图对象。
     * 
     * @param entity 问题实体
     * @return 转换后的问题视图对象
     */
    QuestionVO transToVO(QuestionEntity entity);

    /**
     * 增加指定内容的评论数。
     * 
     * @param contentId 内容ID
     */
    void increaseCommentCount(String contentId);

    /**
     * 增加指定内容的回答数。
     * 
     * @param contentId 内容ID
     */
    void increaseAnswerCount(String contentId);

    List<QuestionVO> getQuestionsOrderByDESC(Integer pageNum, Integer pageSize);

    QuestionSimpleVO transToSimpleVO(QuestionEntity questionEntity);

    QuestionSimpleVO transToSimpleVO(QuestionVO questionVO);

    List<QuestionVO> getQuestionsByUserIdOrderByDESC(Long userId, Integer pageNum, Integer pageSize);
}
